03. Review of 2D Dynamics
Nd787 C3 L4 A02 Review Of 2D Dynamics V1
import numpy as np
import math
class Drone2D:
def __init__(self,
I_x = 0.1, # moment of inertia around the x-axis
m = 0.2, # mass of the vehicle
):
self.I_x = I_x
self.m = m
self.u1 = 0.0
self.u2 = 0.0
self.g = 9.81
self.X = np.array([0.0,0.0,0.0,0.0,0.0,0.0])
# the following 3 functions are used by advance_state
# to get the accelerations of the vehicle.
@property
def y_dot_dot(self):
phi = self.X[2]
return self.u1 / self.m * np.sin(phi)
@property
def z_dot_dot(self):
phi = self.X[2]
return self.g - self.u1*math.cos(phi)/self.m
@property
def phi_dot_dot(self):
return self.u2 / self.I_x
def advance_state(self, dt):
X_dot = np.array([self.X[3],
self.X[4],
self.X[5],
self.z_dot_dot,
self.y_dot_dot,
self.phi_dot_dot])
# Change in state will be
self.X = self.X + X_dot * dt
return self.X
def set_controls(self, u1, u2):
self.u1 = u1
self.u2 = u2